#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re

# '.'     默认匹配除\n之外的任意一个字符，若指定flag DOTALL,则匹配任意字符，包括换行
# '^'     匹配字符开头，若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
# '$'     匹配字符结尾，或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以
# '*'     匹配*号前的字符0次或多次，re.findall("ab*","cabb3abcbbac")  结果为['abb', 'ab', 'a']
# '+'     匹配前一个字符1次或多次，re.findall("ab+","ab+cd+abb+bba") 结果['ab', 'abb']
# '?'     匹配前一个字符1次或0次
# '{m}'   匹配前一个字符m次
# '{n,m}' 匹配前一个字符n到m次，re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb', 'ab', 'abb']
# '|'     匹配|左或|右的字符，re.search("abc|ABC","ABCBabcCD").group() 结果'ABC'
# '(...)' 分组匹配，re.search("(abc){2}a(123|456)c", "abcabca456c").group() 结果 abcabca456c
#
#
# '\A'    只从字符开头匹配，re.search("\Aabc","alexabc") 是匹配不到的
# '\Z'    匹配字符结尾，同$
# '\d'    匹配数字0-9
# '\D'    匹配非数字
# '\w'    匹配[A-Za-z0-9]
# '\W'    匹配非[A-Za-z0-9]
# 's'     匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 '\t'
# '(?P<name>...)' 分组匹配 re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city") 结果{'province': '3714', 'city': '81', 'birthday': '1993'}

m  = re.search('\\\\',"abc\def")
print(m.group())

m  = re.search(r'\\',"abc\def")
print(m.group())

m  = re.search(r'\bblue',"blue")
print(m.group())

ret = re.findall('www.(?:\w+).com','www.baidu.com')
print(ret)

ret = re.split('[ab]','abcd')#先按a 分割 得到 ''和'bcd',  在对''和'bcd'分别按'b'分割
print(ret)


# 元字符至分组
m=re.findall(r'(ad)+','add')
print(m)

ret =re.search('(?P<id>\d{2})/(?P<name>\w{3})','23/com')
print(ret.group())
print(ret.group('id'))


#1 findall 返回所有满足匹配条件的结果，放在列表里面
#2 search 浏览整个字符串去匹配第一个，未匹配成功返回None ，通过group方法得到匹配的字符串
#3 match 同search 不过 只在字符串开始处进行匹配
#4 split 分割 [ab] 先按a分割，在分别对a分割的结果按b分割
